#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QProcessEnvironment>
#include <QDir>
#include "auth/AuthManager.h"
#include "network/RobotManager.h"

int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif

    // 设置环境变量以启用GStreamer后端和AMD硬件编码
    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
    
    // 强制启用GStreamer后端
    qputenv("QT_MEDIA_BACKEND", "gstreamer");
    
    // 设置GStreamer插件路径
    QString gstPath = "D:/gstreamer/1.0/mingw_x86_64";
    qputenv("GST_PLUGIN_PATH", (gstPath + "/lib/gstreamer-1.0").toUtf8());
    qputenv("PATH", (qgetenv("PATH") + ";" + gstPath + "/bin").toUtf8());
    
    // 启用D3D11硬件解码相关环境变量
    qputenv("GST_DEBUG", "vaapi:5,amf:5,d3d11:5,d3d12:5");
    
    // 启用AMD AMF编码器
    qputenv("GST_AMF_DEBUG", "1");
    
    // 优化GStreamer缓冲设置以减少延迟
    qputenv("GST_DEBUG_DUMP_DOT_DIR", "/tmp");
    
    // 设置Qt Multimedia的缓冲策略
    qputenv("QT_MULTIMEDIA_BUFFER_SIZE", "0"); // 最小缓冲
    
    // 启用TCP传输模式以提高稳定性
    qputenv("RTSP_TRANSPORT", "tcp");
    
    // 设置RTSP客户端延迟为0以实现最低延迟
    qputenv("GST_RTSP_CLIENT_LATENCY", "0");
    
    // 启用硬件解码器
    qputenv("GST_GL_API", "opengl");
    qputenv("GST_GL_PLATFORM", "wgl");

    QGuiApplication app(argc, argv);

    // 创建认证管理器
    qDebug() << "main: 创建 AuthManager...";
    AuthManager authManager;
    qDebug() << "main: AuthManager 创建完成";
    
    // 程序退出时清除登录状态
    QObject::connect(&app, &QGuiApplication::aboutToQuit, [&authManager]() {
        qDebug() << "程序即将退出，清除登录状态";
        authManager.clearLoginState();
    });
    
    // 创建机器人管理器
    qDebug() << "main: 创建 RobotManager...";
    RobotManager robotManager;
    qDebug() << "main: RobotManager 创建完成";
    
    // 启动TCP服务器监听（默认端口8888）
    qDebug() << "main: 尝试启动TCP服务器...";
    if (robotManager.startServer(8888)) {
        qDebug() << "main: TCP服务器启动成功，监听端口: 8888";
    } else {
        qDebug() << "main: TCP服务器启动失败";
    }

    QQmlApplicationEngine engine;
    
    // 将authManager和robotManager注册到QML上下文中
    engine.rootContext()->setContextProperty("authManager", &authManager);
    engine.rootContext()->setContextProperty("robotManager", &robotManager);
    
    // 统一使用 MainWindow.qml 管理所有界面
    QString qmlFile = "qrc:/MainWindow.qml";
    
    // 加载相应的QML文件
    const QUrl url(qmlFile);
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    
    engine.load(url);

    return app.exec();
}